package com.hhf.rpc.core.registry;

import com.hhf.rpc.core.config.RegistryConfig;
import com.hhf.rpc.core.model.ServiceMetaInfo;

import java.util.List;

/**
 * @Author hhf
 * @Date 2024/10/17
 * @Description
 */
public interface Registry {

    /**
     * 初始化注册中心
     * @param registryConfig
     */
    void init(RegistryConfig registryConfig);

    /**
     * 注册服务 (提供方)
     * @param serviceMetaInfo
     */
    void register(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 注销服务 (提供方)
     * @param serviceMetaInfo
     */
    void unRegister(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 服务发现 (消费方)
     * @param serviceKey
     * @return
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey) throws Exception;

    /**
     * 注册中心销毁
     */
    void destory();


    /**
     * 心跳检测 (检测提供方)
     */
    void heartBeat();

    /**
     * 监听 (消费方)
     * 服务缓存更新
     * @param serviceNodeKey
     */
    void watch(String serviceNodeKey);
}
